package com.lh.utils;

import com.lh.entity.table.DeadlineNode;
import com.lh.entity.table.RectificationInfo;
import com.lh.entity.vo.RectificationPersonStatistics;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class RectificationDepartmentStatisticsUtil {

    /**
     * 统计整改信息和节点信息，生成部门统计表格数据
     */
    public static List<RectificationPersonStatistics> statistics(
            List<RectificationInfo> processedList,
            List<DeadlineNode> processNodeList) {

        // 使用Map存储统计结果，key为部门名称
        Map<String, RectificationPersonStatistics> statsMap = new HashMap<>();

        // 统计牵头任务相关数据
        statisticsLeadTasks(processedList, statsMap);

        // 统计环节任务相关数据
        statisticsNodeTasks(processNodeList, statsMap);

        // 将Map中的值转换为List返回
        return new ArrayList<>(statsMap.values());
    }

    /**
     * 统计牵头任务数据
     */
    private static void statisticsLeadTasks(
            List<RectificationInfo> processedList,
            Map<String, RectificationPersonStatistics> statsMap) {

        if (processedList == null) {
            return;
        }

        for (RectificationInfo info : processedList) {
            String departmentName = getWorkUnit(info);

            // 使用部门名称作为key
            String key = departmentName;

            // 获取或创建统计对象
            RectificationPersonStatistics stats = statsMap.get(key);
            if (stats == null) {
                stats = new RectificationPersonStatistics(departmentName, departmentName);
                statsMap.put(key, stats);
            }

            // 累加牵头任务数
            stats.setLeadTaskCount(stats.getLeadTaskCount() + 1);

            // 根据任务状态统计灯的数量
            Integer warnLevel = info.getWarnLevel();
            if (warnLevel == 2) {
                stats.setRedLightCount(stats.getRedLightCount() + 1);
            } else if (warnLevel == 1) {
                stats.setYellowLightCount(stats.getYellowLightCount() + 1);
            } else {
                stats.setGreenLightCount(stats.getGreenLightCount() + 1);
            }
        }
    }

    /**
     * 统计环节任务数据
     */
    private static void statisticsNodeTasks(
            List<DeadlineNode> processNodeList,
            Map<String, RectificationPersonStatistics> statsMap) {

        if (processNodeList == null) {
            return;
        }

        for (DeadlineNode node : processNodeList) {
            String departmentName = getNodeWorkUnit(node);

            // 使用部门名称作为key
            String key = departmentName;

            // 获取或创建统计对象
            RectificationPersonStatistics stats = statsMap.get(key);
            if (stats == null) {
                stats = new RectificationPersonStatistics(departmentName, departmentName);
                statsMap.put(key, stats);
            }

            // 累加环节任务数
            stats.setNodeTaskCount(stats.getNodeTaskCount() + 1);

            // 根据节点状态统计灯的数量
            String warnLevel = node.getWarnLevel();
            if (warnLevel.equals("2")) {
                stats.setNodeRedLightCount(stats.getNodeRedLightCount() + 1);
            } else if (warnLevel.equals("1")) {
                stats.setNodeYellowLightCount(stats.getNodeYellowLightCount() + 1);
            } else {
                stats.setNodeGreenLightCount(stats.getNodeGreenLightCount() + 1);
            }
        }
    }

    /**
     * 从RectificationInfo中获取部门名称
     */
    private static String getWorkUnit(RectificationInfo info) {
        return info.getDepartmentName();
    }

    /**
     * 从DeadlineNode中获取部门名称
     */
    private static String getNodeWorkUnit(DeadlineNode node) {
        return node.getDepartmentName();
    }


}
